/**
 * 
 */
package co.com.ebusiness.trader.pages;

import java.util.List;

import javax.servlet.http.HttpSession;

import org.apache.tapestry5.SelectModel;
import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.InjectComponent;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.beaneditor.Validate;
import org.apache.tapestry5.corelib.components.Form;
import org.apache.tapestry5.corelib.components.TextField;
import org.apache.tapestry5.corelib.components.Zone;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.Request;
import org.apache.tapestry5.services.RequestGlobals;
import org.apache.tapestry5.services.SelectModelFactory;

import co.com.ebusiness.trader.encoders.UsuarioEmpresaEncoder;
import co.com.ebusiness.trader.seguridad.model.Usuario;
import co.com.ebusiness.trader.seguridad.model.UsuarioEmpresa;
import co.com.ebusiness.trader.services.SeguridadService;
import co.com.ebusiness.trader.utilidades.model.Estado;

/**
 * @author Luis Agudelo
 *
 */
public class Index {
	
	
	
	
	private static final String BAD_CREDENTIALS = "Error en login y/o password. Por favor intente de nuevo."; 
	private static final String INACTIVE = "Usuario inactivo en el sistema.";
	
	
	@Inject
    private RequestGlobals requestGlobals;
	
	@Property
	@SuppressWarnings("unused")
	private SelectModel empresasModel;

	@Property
	@Persist
	@Validate("required")
	private UsuarioEmpresa empresa;

	private UsuarioEmpresaEncoder empresaEncoder;

	@Inject
	@Property
	private SelectModelFactory selectModelFactory;
	
	@Property
	private boolean error;
	
	@Property
	private String errorMensaje;
	
	@Inject
	private SeguridadService seguridadService;
	
	@Persist
    @Property
    @Validate("required")
	private String login;
	
	@Property
	@Validate("required")
    private String password;
	
	
	@Inject
	private Request request;

	@Component
	private Form ajaxForm;

	@Component(id = "login")
	private TextField loginField;

	@Component(id = "password")
	private TextField passwordField;

	@InjectComponent
	private Zone formZone;
	
	
	
	void onValidateFromAjaxForm() {

		if (login == null || login.trim().equals("")) {
			ajaxForm.recordError(loginField, "El login es requerido.");
		}
		if (password == null || password.trim().equals("")) {
			ajaxForm.recordError(passwordField, "El password es requerido.");
		}
		
	}

	Object onSuccess() {
		Usuario usuario = null;
		error=true;
        if (seguridadService.checkLogin(login, password)) {
        	usuario = seguridadService.getUser(login);
        	if (usuario != null && usuario.getEstado().equals(Estado.Activo)){
        		
        		List<UsuarioEmpresa> empresas = seguridadService.getEmpresas(usuario);
        		
        		
        		empresasModel = selectModelFactory.create(empresas, "nombreEmpresa");
        		error= false;
        	}else{
        		errorMensaje = INACTIVE;
        	}
        	
        	
        }else{
        	errorMensaje = BAD_CREDENTIALS;
        }
		return request.isXHR() ? formZone.getBody() : null;
	}

	Object onFailure() {
		return request.isXHR() ? formZone.getBody() : null;
	}
	
	public UsuarioEmpresaEncoder getEmpresaEncoder() {
		return empresaEncoder == null ? new UsuarioEmpresaEncoder() : empresaEncoder;
	}

	void onActivate(){
		HttpSession session = requestGlobals.getHTTPServletRequest().getSession();
		session.invalidate();
	}

	public String getErrorMessage() {
		String ret = null;
		if (error) {
			ret = errorMensaje;
		}
		return ret;
	}
	
	String onIngresar(){
		return "Home";
	}
	
	
}